package com.atguigu.java;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * @author yihu
 * @create 2021-03-06 16:45
 * @email:1057202547@qq.com
 * @dec:
 * *
 *  * Collections:操作Collection、Map的工具类     Collection 接口
 *  * 面试题：Collection 和 Collections的区别？
 */
public class CollectionsTest {
    /*
        reverse(List)：反转 List 中元素的顺序
        shuffle(List)：对 List 集合元素进行随机排序
        sort(List)：根据元素的自然顺序对指定 List 集合元素按升序排序
        sort(List，Comparator)：根据指定的 Comparator 产生的顺序对 List 集合元素进行排序
        swap(List，int， int)：将指定 list 集合中的 i 处元素和 j 处元素进行交换

        Object max(Collection)：根据元素的自然顺序，返回给定集合中的最大元素
        Object max(Collection，Comparator)：根据 Comparator 指定的顺序，返回给定集合中的最大元素
        Object min(Collection)
        Object min(Collection，Comparator)
        int frequency(Collection，Object)：返回指定集合中指定元素的出现次数
        void copy(List dest,List src)：将src中的内容复制到dest中
        boolean replaceAll(List list，Object oldVal，Object newVal)：使用新值替换 List 对象的所有旧值

    */
    @Test
    public  void test1(){
        List list = new ArrayList();
        list.add(123);
        list.add(43);
        list.add(765);
        list.add(765);
        list.add(765);
        list.add(-97);
        list.add(0);
        System.out.println(list);//[123, 43, 765, 765, 765, -97, 0]
        //反转
        //Collections.reverse(list);//[0, -97, 765, 765, 765, 43, 123]

        //随机排序
        //Collections.shuffle(list);

        //元素按升序排序
        //Collections.sort(list); //[-97, 0, 43, 123, 765, 765, 765]

        //将指定 list 集合中的 i 处元素和 j 处元素进行交换
        //Collections.swap(list,2,5);//[123, 43, -97, 765, 765, 765, 0]

        //返回指定集合中指定元素的出现次数
        int frequency = Collections.frequency(list, 123);
        System.out.println(frequency); //1

        System.out.println(list); //[]
    }

    /**
     * copy
     */
    @Test
    public  void test2(){
        List list = new ArrayList();
        list.add(123);
        list.add(43);
        list.add(765);
        list.add(765);
        list.add(765);
        list.add(-97);
        list.add(0);
        //报异常：IndexOutOfBoundsException("Source does not fit in dest")
        // List dest = new ArrayList();
        // Collections.copy(dest,list);


        List dest = Arrays.asList(new Object[list.size()]);
        Collections.copy(dest,list); //[123, 43, 765, 765, 765, -97, 0]
        System.out.println(dest);

        /*
          Collections 类中提供了多个 synchronizedXxx() 方法，
          该方法可使将指定集合包装成线程同步的集合，从而可以解决
          多线程并发访问集合时的线程安全问题
        */
        //返回的list1 就是线程安全的
        List list1 = Collections.synchronizedList(list);
    }
}
